home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 3 / Light ROM 3 - Disc 2.iso / programs / amiga / macromkr / rexxscri.lha / REXXscripts / jpeginfo.rexx < prev    next >
OS/2 REXX Batch file  |  1980-01-07  |  3KB  |  114 lines

  1. /*
  2.  * JPEG.rexx
  3.  *
  4.  *  Written by: Ben Williams
  5.  * Last Update: March 4th, 1992
  6.  *         For: Black Belt Systems image processing series IM, IM F/c, and IP.
  7.  * ---------------------------------------------------------------------------
  8.  *    Revision: 1.07
  9.  *
  10.  *  Then BLATENTLY stolen and hacked by me to get JUST the width/height
  11.  *  of a jpeg file.  I hope you guys don't mind.. :-)
  12.  */
  13.  
  14. parse arg var1
  15.  
  16. /*
  17.  * open rexxsupport.library -- needed for some functions
  18.  */
  19. if ~show('L',"rexxsupport.library") then do
  20.   if addlib('rexxsupport.library',0,-30,0) then do
  21.       /* everything's ok */
  22.     end;
  23.   else do
  24.     say 'We Have A Library Problem, Unable To Load "rexxsupport.library"';
  25.     say 'Cannot operate JPEG.rexx without this library - sorry!';
  26.     exit 10;
  27.     end;
  28.   end;
  29.  
  30.   if var1 = '' | var1 = '?' then do
  31.     nameid = '';
  32.     end;
  33.   else do
  34.     nameid = right(var1,4);
  35.     end;
  36.  
  37.   if nameid ~= '.jpg' | var1 = '' then do
  38.     say 'Use: rx jpeg.rexx filename.jpg';
  39.     exit(0);
  40.     end;
  41.  
  42.   say 'File: 'var1;
  43.   jpegfile = var1;
  44.  
  45. /*
  46.  * at this point, we have at least some assurance that we
  47.  * have a real JPEG file to work with. Now, we need to look into
  48.  * the file and see how big the image is, so we can open a new
  49.  * buffer of the appropriate size.
  50.  */
  51.  
  52.   call open(fhandle,jpegfile,'read');      /* open the file     */
  53.   if rvalue() ~= 65496 then do /* FFD8 */
  54.     'message Not a JFIF file! - Initial read fails';
  55.     call close(fhandle);
  56.     exit(0);
  57.     end;
  58.  
  59.   work=1;
  60.   do while work = 1
  61.     thisid = rvalue();
  62.     thisln = rvalue();
  63.     thisda = readch(fhandle,thisln-2);
  64.     select
  65.       when thisid = 65472 | thisid < 65488 then do /* FFC0-FFCF (SOF0-15) */
  66.         height = c2d(substr(thisda,2,2));
  67.         width  = c2d(substr(thisda,4,2));
  68.         work=0;
  69.         end;
  70.       when thisid = 65504 then do  /* FFE0 */
  71.         fid = left(thisda,4);
  72.         if fid ~= 'JFIF' then do
  73.           'message Not a JFIF file!';
  74.           call close(fhandle);
  75.           exit 0;
  76.           end;
  77.         end;
  78.       otherwise do
  79.         nop;
  80.         end;
  81.       end;
  82.     end;
  83.  
  84.   call close(fhandle);                     /* close the file    */
  85.  
  86.   if height < 0 then do
  87.     "message Bad height: "||height;
  88.     exit 0;
  89.     end;
  90.  
  91.   if height > 32767 then do
  92.     "message Bad height: "||height;
  93.     exit 0;
  94.     end;
  95.  
  96.   if width < 0 then do
  97.     "message Bad width: "||width;
  98.     exit 0;
  99.     end;
  100.  
  101.   if width > 32767 then do
  102.     "message Bad width: "||width;
  103.     exit 0;
  104.     end;
  105.  
  106.   say 'Width: 'width;
  107.   say 'Height: 'height;
  108.     exit 0;
  109. end;
  110.  
  111. rvalue:
  112.   wordnum = c2d(readch(fhandle,1)) * 256;
  113.   wordnum = wordnum + c2d(readch(fhandle,1));
  114.   return wordnum;